package Ventanas;

import java.awt.EventQueue;
import javax.swing.JButton;

import Paneles.subPanelListaMensajes;
import Paneles.subPanelListaTemas;
import Paneles.subPanelListaTemasModerador;
import Paneles.subPanelMensajes;
import Paneles.subPanelModerador;
import Paneles.subPanelUsuarioRegistrado;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;

import javax.swing.JTextField;

import foroindaltronia.bd.IModerador;
import foroindaltronia.bd.Moderador;
import foroindaltronia.bd.Tema;
import foroindaltronia.bd.Tema_no_terminal_oculto;
import foroindaltronia.bd.Tema_no_terminal_visible;
import foroindaltronia.bd.Tema_terminal_visible;


public class VForoModerador extends VForo{

	private subPanelModerador subVModerador;
	private VCrearTemaModerador crearTema;
	private VEscribirMensajeModerador escribirMensaje;
	public static JButton btnCrearMensaje;
	public static JButton btnCrearTema;
	private JButton btnEliminar;
	private VBuscar ventanaBuscar;
	public static Moderador moderador;
	public static IModerador interfazModerador;
	public static Tema temaTerminal;
	
	/**
	 * Launch the application.
	 */
	/**public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					VForoModerador window = new VForoModerador();
					window.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}**/

	
	/**public VForoModerador()
	{
		initialize();
		botonVolverListaTemas.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					panelListaTemas.actualizarListaTemas(interfazModerador.verTemas(((Tema_no_terminal_visible)temaActual).getTema_no_terminal_visible_padre()));
					System.out.println("Se toca las pelotas");
				} catch (RemoteException e) {
					e.printStackTrace();
				}
			}
		});
		//temaActual = new Tema("raiz",-1);
	}**/
	
	/**
	 * Create the application.
	 */
	public VForoModerador(Moderador moderador) {
		super();
		
			try {
				/**if(System.getSecurityManager() == null) {
			         System.setSecurityManager(new RMISecurityManager());
			      }**/
				interfazModerador = (IModerador) Naming.lookup("rmi://localhost/moderador");
				this.moderador = moderador;
				subVModerador = new subPanelModerador(this);
				subVModerador.setBounds(587, 11, 220, 110);
				getContentPane().add(subVModerador);
				initialize();
				
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (RemoteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NotBoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	
	private void initialize()
	{
		btnCrearMensaje = new JButton("Crear mensaje");
		btnCrearMensaje.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				escribirMensaje = new VEscribirMensajeModerador();
				escribirMensaje.setVisible(true);
			}
		});
		btnCrearMensaje.setBounds(190, 164, 111, 23);
		getContentPane().add(btnCrearMensaje);
		
		btnCrearTema = new JButton("Crear tema");
		btnCrearTema.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				boolean soloTemaOculto=false;
				if(VForo.temaActual instanceof Tema_no_terminal_oculto)
					soloTemaOculto=true;
				crearTema = new VCrearTemaModerador(soloTemaOculto);
				crearTema.setVisible(true);
			}
		});
		btnCrearTema.setBounds(10, 164, 89, 23);
		getContentPane().add(btnCrearTema);
		
		panelListaTemas = new subPanelListaTemasModerador();
		scrollPanelListaTemas.setViewportView(panelListaTemas);
		getContentPane().add(scrollPanelListaTemas);
		
		botonVolverListaTemas.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					if(temaActual != null)
					{	
						if(muestraMensajes){
							System.out.println("DEBERIA HACERLO");
							actualizarListaTemaTerminal(interfazModerador.verTemas(temaActual));
							muestraMensajes=false;
							muestraTemas = true;
							btnCrearMensaje.setEnabled(true);
						}
						else
						{
							System.out.println("NO MUESTRA MENSAJES!!!");
						
							if(temaActual instanceof Tema_no_terminal_oculto)
							{
								Tema temaPadre = ((Tema_no_terminal_oculto)temaActual).getTema_no_terminal_oculto_padre();
								if(temaPadre == null)
									temaActual = ((Tema_no_terminal_oculto)temaActual).getEsta_en();
								else
									temaActual = temaPadre;
							}
							else if(temaActual instanceof Tema_no_terminal_visible)
								temaActual = ((Tema_no_terminal_visible)temaActual).getTema_no_terminal_visible_padre();
							
						Tema[] listaTemas = interfazModerador.verTemas(temaActual);
						actualizarListaTemaTerminal(null);
						if(listaTemas.length != 0)
								((subPanelListaTemasModerador)panelListaTemas).actualizarListaTemas(listaTemas);
						int index = lblvariable.getText().lastIndexOf(" > ");
						if(index != -1)
								{
									String nuevaCadena = new String(lblvariable.getText().toCharArray(),0,index);
									lblvariable.setText(nuevaCadena);
								}
						else
							lblvariable.setText("Principal");
						}
					}
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		scrollPanelListaTemas.setColumnHeaderView(botonVolverListaTemas);
		
		JButton btnBuscarTemaO = new JButton("Buscar...");
		btnBuscarTemaO.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				//CODIGO PARA SUBIR UN ARCHIVO AL SERVIDOR
				try {
			         File file = new File("fulano.jpg");
			         byte buffer[] = new byte[(int)file.length()];
			         BufferedInputStream input = new
			      BufferedInputStream(new FileInputStream("fulano.jpg"));
			         input.read(buffer,0,buffer.length);
			         input.close();
			         interfazModerador.subirArchivo(buffer, "fulanita.jpg");
			      } catch(Exception e){
			         System.out.println("FileImpl: "+e.getMessage());
			         e.printStackTrace();
			      }
				
				//CODIGO PARA BAJARSE UN ARCHIVO DEL SERVIDOR
				/**byte[] filedata;
				try {
					filedata = interfazModerador.bajarArchivo("fulano.jpg");
					String path = "C:"+File.separator+"adjuntos"+File.separator+"fulano2.jpg";
					System.out.println("Path: "+path);
					File file = new File(path);
					BufferedOutputStream output = new
			           BufferedOutputStream(new FileOutputStream(file.getName()));
			         output.write(filedata,0,filedata.length);
			         output.flush();
			         output.close();
				} catch (RemoteException e) {
					System.out.println("Problema remoto");
					e.printStackTrace();
				} catch (FileNotFoundException e) {
					System.out.println("Problema con IO, no se encuentra el archivo");
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
					System.out.println("Problema con IO");
				}**/

				//CODIGO ORIGINAL DEL BOTON DE BUSCAR
				//ventanaBuscar = new VBuscar();
				//ventanaBuscar.setVisible(true);
			}
		});
		btnBuscarTemaO.setBounds(686, 164, 111, 23);
		getContentPane().add(btnBuscarTemaO);
		
		btnEliminar = new JButton("Eliminar");
		btnEliminar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(temaActual != null)
				{
				if(muestraTemas && temaActual.getGestionado().getUsuario().compareTo(moderador.getUsuario())==0)
					System.out.println(temaActual.getNombre());
				else if(muestraMensajes && temaTerminal != null) {
					if(temaTerminal.getGestionado().getUsuario().compareTo(moderador.getUsuario())==0)
						System.out.println(temaTerminal.getNombre());
				/**try {
					interfazAdministrador.eliminarTemaTerminal(temaTerminal);
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}**/
				}
				}
			}
		});
		btnEliminar.setBounds(109, 164, 71, 23);
		getContentPane().add(btnEliminar);
		
		actualizarListaTemas();
	}
	
	public void actualizarListaTemas()
	{
		try {
			((subPanelListaTemasModerador)panelListaTemas).actualizarListaTemas(interfazModerador.verTemas(temaActual));
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void actualizarListaMensajes(String nombrePadre)
	{
		btnCrearMensaje.setEnabled(false);
		subPanelMensajes panelMensajes;
		try {
			temaTerminal =interfazModerador.getTemaTerminal(nombrePadre);
			System.out.println("Oh si");
			panelMensajes = new subPanelMensajes(interfazModerador.buscarMensajesDeTemaTerminal(nombrePadre),moderador);
			panelPrincipal.setColumnHeader(null);
			panelPrincipal.setViewportView(panelMensajes);
			lblvariable.setText(lblvariable.getText()+" > "+nombrePadre);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void actualizarListaTemaTerminal(Tema[] param)
	{
		listaMensajes.actualizarListaTemasTerminales(param);
		panelPrincipal.setViewportView(listaMensajes);
	}
}
